package cn.tedu.oop;

import java.util.InputMismatchException;
import java.util.Scanner;

/**本类用作异常的入门案例
 * 如果一个方法抛出了异常,那么谁调用这个方法,谁就需要处理异常,
 * 两种方法:捕获处理,抛出处理
 * 注意:一般会在main方法调用之前解决处理
 * 而不是将问题抛给main方法,因为没人处理还是报错*/
public class ExceptionDemo {
    public static void main(String[] args) {
        //method1();//发现异常
        //method2();//解决异常   捕获处理
        //method3();//解决      向上抛出
        f();

    }
    private static void f(){
        try{
            method3();
        }catch (Exception e){
            System.out.println("输入的数据有误");
        }
    }

/*异常抛出格式:
* 在方法的()和{}之间,写throws异常类型
* 如果有多个异常,使用逗号分隔
* ()ArithmeticException,InputMismatchException{},*/
    private static void method3()throws  Exception{
        System.out.println("请输入两个整数");
        int a=new Scanner(System.in).nextInt();
        int b=new Scanner(System.in).nextInt();
        System.out.println(a/b);
    }
/*try-catch结构可以嵌套,如果有多种异常类型需要特殊处理的话*/
    private static void method2() {

        try{
            System.out.println("请输入两个整数");
            int a=new Scanner(System.in).nextInt();
            int b=new Scanner(System.in).nextInt();
            System.out.println(a/b);
        }catch(ArithmeticException e){
            System.out.println("除数不能为0");
        }/*使用多台的思想,不论什么异常,统一看做父亲型Exception
        做出更加通用的解决方案,甚至可以只写着1个,*/
        catch(InputMismatchException e){
            System.out.println("请输入规定的类型:整数");
        }
    }
    /*异常捕获处理的格式
     try{
        可能会抛出异常的代码
     }catch(预先设想的异常类型  异常名){
        万一捕获到异常,进行处理的解决方案
     }*/

    private static void method1() {
        System.out.println("请输入两个整数");
        int a=new Scanner(System.in).nextInt();
        int b=new Scanner(System.in).nextInt();
        System.out.println(a/b);
        //输入10/0,报错ArithmeticException 算术异常,除数不能为0
        //输入10/3.4,报错InputMismatchException  输入不匹配异常
        /**1.不要害怕bug,真正的勇士敢于直面自己写的bug
         * 2.学会看报错提示
         * 3.看报错行号,确定报错位置,
         * 注意:源码不会错.看自己写的代码.*/

    }
}
